home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / image / experien.zip / ZOOM.ASM < prev   
Assembly Source File  |  1995-08-17  |  3KB  |  107 lines

  1. ; Original By Sahara Surfers, thx dudes
  2.  
  3. MODEL LARGE, PASCAL
  4. .386P
  5.  
  6. .Code
  7.  
  8. BUFWIDTH = 320                ; buffer width in pixels
  9. BUFHEIGHT = 200             ; buffer height in pixels
  10.  
  11. SRCWIDTH = 310                          ; zoom source width - zooming
  12. SRCHEIGHT = 190                         ; zoom source height
  13.  
  14. Public ZoomBuffer 
  15.  
  16. ;*****************************************************************************
  17. ;*
  18. ;*  Procedure ZoomBuffer(srcSeg,destSeg : word; xOffset,yOffset : integer);
  19. ;*
  20. ;*  Description:  Zoom data from one buffer to another and to screen
  21. ;*
  22. ;*  Input:      ushort srcSeg         source buffer segment
  23. ;*          ushort destSeg      destination buffer segment
  24. ;*          int xOffset         zooming center X offset
  25. ;*            int yOffset         zooming center Y offset
  26. ;*
  27. ;****************************************************************************/
  28.  
  29. ZoomBuffer Proc Far Uses ds si di, srcSeg : word, destSeg : word, xOffset : word, yOffset : word
  30.            Local   yIncWhole : word, yIncFract : word, y : word, yFract : word, yCount : word
  31.  
  32.        mov    ax,[yOffset]
  33.        add    ax,(BUFHEIGHT / 2) - (SRCHEIGHT / 2)
  34.        mov    [y],ax
  35.        mov    [yFract],0
  36.        mov    eax,SRCHEIGHT * 65536
  37.        xor    edx,edx
  38.        mov    ebx,BUFHEIGHT
  39.        div    ebx
  40.        mov    [yIncFract],ax
  41.        shr    eax,16
  42.        mov    [yIncWhole],ax
  43.  
  44.            mov     ax,cs
  45.            mov     es,ax
  46.  
  47.            mov     eax,SRCWIDTH * 65536
  48.        xor    edx,edx
  49.        mov    ebx,BUFWIDTH
  50.        div    ebx
  51.  
  52.            mov     bx,ax
  53.            shr     eax,16
  54.            mov     cx,ax
  55.            mov     ax,(BUFWIDTH / 2) - (SRCWIDTH / 2)
  56.            add     ax,[xOffset]
  57.            xor     dx,dx
  58.            mov     di,offset @@xlp
  59.            mov     si,BUFWIDTH/2
  60.  
  61.    @@makex:
  62.            mov     es:[di+2],ax
  63.            add     dx,bx
  64.            adc     ax,cx
  65.            mov     es:[di+6],ax
  66.            add     dx,bx
  67.            adc     ax,cx
  68.            add     di,17
  69.            dec     si
  70.            jnz     @@makex
  71.  
  72.        mov    [yCount],BUFHEIGHT
  73.        mov    ds,[srcSeg]
  74.        mov    es,[destSeg]
  75.        xor    di,di
  76.  
  77.        mov    ax,0A000h
  78.        mov    gs,ax
  79.  
  80.    @@ylp:    mov    ax,BUFWIDTH
  81.        mul    [y]
  82.        mov    si,ax
  83.  
  84.    @@xlp:
  85.        REPT    BUFWIDTH/2
  86.  
  87.            DB      8Ah, 84h, 34h, 12h              ; mov     al,[ds:si+1234h]
  88.            DB      8Ah, 0A4h, 34h, 12h             ; mov     ah,[ds:si+1234h]
  89.            DB      26h, 89h, 05h                   ; mov     [es:di],ax
  90.            DB      65h, 89h, 05h                   ; mov     [gs:di],ax
  91.            DB      83h, 0C7h, 02h                  ; add     di,2
  92.  
  93.        ENDM
  94.  
  95.        mov    ax,[yIncFract]
  96.        add    [yFract],ax
  97.        mov    ax,[yIncWhole]
  98.        adc    [y],ax
  99.  
  100.        dec    [yCount]
  101.        jnz    @@ylp
  102.  
  103.        ret
  104. ZoomBuffer EndP
  105.  
  106. END
  107.